/* eslint-disable no-use-before-define */
import { ObjectUtil } from '@utils/object-util'

// region TODO 表单
export class AlarmRuleSaveForm {
  constructor (option?: Record<string, any>) {
    option && ObjectUtil.updateVal(this, option)
    if (!this.rule) this.rule = new ConditionDTO()
  }

  id?: string
  // 触发条件
  rule?: ConditionDTO = new ConditionDTO()
  // 是否推送 0-是 1-否
  inform?: string
  // 推送类型 0-公众号 1-短信 2-播报 - 多选以”,“分割
  informType?: string
  // 触发器名称
  name?: string
  // 触发对象 - 设备id / 变量模板id 根据type区分
  targetId?: string
  // 触发器类型 0-设备 1-变量模版
  type?: string
  // 变量id
  variableId?: string
  // 自定义消息
  message?: string
}

export class ConditionDTO {
  // 触发条件 0-大于A、1-小于A、2-等于A、3-大于A且小于B、4-小于A或者大于B、5-不等于
  name?: number
  // 触发条件值A
  valueA?: string
  // 触发条件值B
  valueB?: string
}
// endregion

export interface AlarmHistoryDTO {
  // 报警时间
  alarmAt?: string
  // 报警规则id
  alarmId?: number
  // 是否恢复 - false-正常
  alarmState?: boolean
  // 报警值
  alarmValue?: string
  // 触发条件
  rule?: ConditionDTO
  // 设备id
  deviceId?: string
  // 设备名称
  deviceName?: string
  // 结束时间
  endTime?: string
  // 报警记录id
  id?: string
  // 推送类型 0-公众号 1-短信 2-播报
  informType?: string
  // 报警信息
  message?: string
  // 恢复时间
  recoverAt?: string
  // 恢复值
  recoverValue?: string
  // 开始时间
  startTime?: string
  // 是否消音
  status?: boolean
  // 变量id
  variableId?: string
  // 变量名称
  variableName?: string
}

export interface AlarmDTO {
  // 触发条件
  rule?: ConditionDTO
  // 创建时间
  createdAt?: string
  // 创建人
  createdBy?: string
  // 设备id
  id?: string
  // 是否推送 0-是 1-否
  inform?: string
  // 推送类型 0-公众号 1-短信 2-播报
  informType?: string
  // 触发器名称
  name?: string
  // 触发对象
  targetId?: number
  // 触发对象名称
  targetName?: string
  // 触发器类型 0-设备 1-变量模版
  type?: string
  // 变量id
  variableId?: number
  // 变量名称
  variableName?: string
  // 启用状态 true-启用
  enable?: boolean
}

export interface AlarmStatisticsVO {
  // 今日报警中
  todayAlarmCount?: number
  // 今日报警数
  todayCount?: number
  // 今日已恢复
  todayRecoverCount?: number
  // 本周报警数
  weekCount?: number
}

export interface AlarmDeviceStatisticsVO {
  // 报警次数
  alarmCount?: number
  // 恢复次数
  recoverCount?: number
  // 日期
  time?: string
}

export interface AlarmGroupStatisticsVO {
  deviceName: string,
  alarmCount: number
}

export interface DeviceRoleAlarmDTO {
  // 触发器Id
  alarmId?: string
  // 触发器名称
  alarmName?: string
  // 创建时间
  createdAt?: string
  // 设备Id
  deviceId?: string
  // 设备ids
  deviceIds?: string[]
  // 设备名
  deviceName?: string
  // 报警推送项
  informType?: string
  // 模糊查询
  q?: string
  // 模版ids
  tempIds?: string[]
  // 4-仅自己 3-与我分享
  type?: number
  // 用户关联触发器Id
  userAlarmId?: string
  // 创建人Id
  userId?: string
  // 用户报警推送项
  userInformType?: string
  // 创建人姓名
  userName?: string
  // 变量Id
  variableId?: string
  // 变量名
  variableName?: string
}

export interface AlarmUserDeviceDTO {
  // 创建时间
  createdAt?: string
  // 创建人
  createdBy?: string
  // 设备id
  deviceId?: string
  // id
  id?: string
  // 推送类型 0-公众号 1-短信 2-播报
  informType?: string
  // 更新时间
  updatedAt?: string
  // 更新
  updatedBy?: string
  // 用户id
  userId?: string
  // 变量id
  variableId?: string
}
